Skip to main content

パス前処理ファンクションブロックの実装

を参照してください CNC14_PathPreprocessing.project のインストールディレクトリにあるサンプルプロジェクト CODESYS 下に ..\CODESYS SoftMotion\Examples

サンプルプロジェクトは、新しいパス前処理関数ブロックを実装する方法を示しています。

パスの前処理は通常、Gコードから読み取られたパスを変更するために使用されます。これにより、工具半径補正やコーナースムージングなどの機能を実装できます。ただし、特定のマシンまたはアプリケーション用の特定の関数をパス前処理ファンクションブロックとして統合することもできます

パスの前処理の詳細については、以下を参照してください。 パスの前処理とキューサイズ.

パス前処理関数ブロックの使用方法の例については、以下を参照してください。 CNC 例 03: パスの前処理をオンラインで実行する.

接線変更の制限

この例は、2D カッティングアプリケーションを示しています。Gコードで定義された経路に沿って切断するには、ナイフを使用する必要があります。は SMC_TRAFO_GantryCutter2 トランスフォームを使用して、パスの現在の接線に基づいてナイフの角度を決定します。

課題は、ナイフの回転が速すぎないようにすることです。さもないと、切れ目がきれいになりません。ナイフの角速度の制限は、サンプルプロジェクトで新しく作成されたパス前処理関数ブロックを使用して解決されています LimitTangentVelocity。接線の変化速度が設定可能な最大値を超えないように、経路上の送り速度を変更します

Gコードは、角が滑らかになったシンプルな長方形です。

_sm_img_example_preprocessing_function_block1.png

トレースには実行結果が表示されます。ナイフの回転速度に対応するC軸の速度がオレンジ色で表示されます。指定どおりに 45°/s に制限されています

_sm_img_example_preprocessing_function_block2.png

アプリケーションの構造

この構造はCNCアプリケーションでは一般的です。G コードはバックグラウンドタスクで読み込まれ、パスの前処理もここで行われます。補間はバスタスクで実行されます。

ザ・ LimitTangentVelocity 関数ブロックには、パス前処理関数ブロックに必要なステップと状態が表示されます。

基本的な原則は、関数ブロックがパス要素 (type) を読み取り、処理してから書き込むことです。 SMC_GEOINFO) 入力キューから (poqDataIn() を出力キュー () に送ります。poqDataOut)。要素は入力キューから削除されます。

送り速度を変更するロジックは 102 行目から 138 行目にあります。補助機能です。 ComputeMaxCurvature 特定のパスエレメントで発生する可能性がある最大曲率を計算します。

// Our velocity limitation comes here. This modifies an element from the
// input queue and copies the modified element to the output queue.
// Finally, the element is removed from the input queue

m_geo := pgeo^; // Copy the element
 // Note: the feature flags set in the G-Code with G38/G39 can be queried
 // by reading pgo^.dwFeatureFlags, like this:
 IF (SHR(m_geo.dwFeatureFlags, featureFlag) AND 1) = 1 THEN
     // feature is turned on

     ok := ComputeMaxCurvature(m_geo, kappa=> kappa_max);
     IF NOT ok THEN
         // Curvature cannot be computed
         m_state := STATE_ERROR;
         ErrorID := SMC_INVALID_PARAMETER;
         OnExit();
         RETURN;
     END_IF

     // Compute maximum allowed path velocity based on maximum curvature
     // and maximum allowed angular velocity
     IF kappa_max = 0 THEN
         // No curvature, no limitation necessary
         vel := m_geo.dVel;
     ELSE
         vel := m_maxAngularVelocity_rad / kappa_max;
     END_IF

     IF velMin < 0 OR vel < velMin THEN
         velMin := vel;
     END_IF

     // Set new maximum velocity for the element
     m_geo.dVel := MIN(m_geo.dVel, vel);
 ELSE
     // feature is turned off
 END_IF

コミッショニング

  1. アプリケーションをビルドし、コントローラーにダウンロードします。

  2. アプリケーションを起動します。

  3. トレースを開き、コントローラにダウンロードします。

  4. 値を書き込む TRUE 変数に Path.bExecutePLC_PRG.bStart

  5. トレース内のGコードの処理を追跡できます。